//给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数，使它们的和与 target 最接近。
//
// 返回这三个数的和。
//
// 假定每组输入只存在恰好一个解。
//
//
//
// 示例 1：
//
//
//输入：nums = [-1,2,1,-4], target = 1
//输出：2
//解释：与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
//
//
// 示例 2：
//
//
//输入：nums = [0,0,0], target = 1
//输出：0
//
//
//
//
// 提示：
//
//
// 3 <= nums.length <= 1000
// -1000 <= nums[i] <= 1000
// -10⁴ <= target <= 10⁴
//
//
// Related Topics 数组与矩阵 双指针 排序 👍 1366 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function threeSumClosest(nums: number[], target: number): number {

    nums.sort((a, b) => a - b)
    let minGap : number = Infinity
    let count : number
    for (let i = 0; i < nums.length; i ++) {
        let left : number = i + 1
        let right : number = nums.length - 1
        while (left < right) {
            if (Math.abs(nums[i] + nums[right] + nums[left] - target) < minGap) {
                minGap = Math.abs(nums[i] + nums[right] + nums[left] - target)
                count = nums[i] + nums[right] + nums[left]
            }
            if (nums[i] + nums[right] + nums[left] > target) right --
            else left ++
        }
    }
    return count
};
//leetcode submit region end(Prohibit modification and deletion)
